package com.zx._01_基础._012_反射.案例;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class BaseDaoImpl<T, PK extends Serializable> implements BaseDao<T, PK> {

    private Class entityClass;

    public BaseDaoImpl() {
        // 必须拿到对象实例才会获得泛型，首先获得实例的class： 例如 UserDaoImpl
        Class<? extends BaseDaoImpl> aClass = this.getClass();
        // getGenericSuperclass 获得 泛型的父类:  rowType=BaseDaoImpl, ActualTypeArguments=User,Long
        Type genType = aClass.getGenericSuperclass();
        // getActualTypeArguments()方法来获取泛型参数的实际类型。
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
        entityClass = (Class<T>) params[0];
    }

    public boolean insert(T t) {
        return true;
    }

    public boolean delete(T t) {
        return true;
    }

    public boolean update(T t) {
        return true;
    }

    public T getById(PK pk) {
        return null;
    }

    @Override
    public Class<T> getEntityClass() {
        return this.entityClass;
    }


}
